package base;
/**
 * File: FGTRInst.java
 * Author: Timothy Opie
 * Created: Wed Nov 12 16:59:02 EST 2003
 */

import jm.audio.io.SampleOut;
import jm.audio.synth.AllFGTR;
import jm.audio.synth.Oscillator;

public final class FGTRInst extends jm.audio.Instrument {
    //----------------------------------------------
    // Attributes
    //----------------------------------------------
    // the name of the sample file
    public int channels = 2, sampleRate = 44100;
    private String fileName;
    private int grainDuration, grainsPerSecond;
    private float bandwidthTop, bandwidthBottom;

    //----------------------------------------------
    // Constructor
    //----------------------------------------------
    public FGTRInst(String fileName, int gDur, float bwTop, float bwBottom, int gps) {
        // Use this constructor when you want to granulate an audio file.
        this.fileName = fileName; //Name of .au file
        this.grainDuration = gDur * ((channels * sampleRate) / 1000); //in milliseconds
        this.bandwidthBottom = bwBottom; //bottom frequency
        this.bandwidthTop = bwTop; //top frequency
        this.grainsPerSecond = gps;
    }

    //----------------------------------------------
    // Methods
    //----------------------------------------------

    /**
     * Create the Audio Chain for this Instrument
     * and assign the primary Audio Object(s). The
     * primary audio object(s) are the one or more
     * objects which head up the chain(s)
     */
    public void createChain() {
        // define the chain
        Oscillator sin = new Oscillator(this, 2, 44100, 2);
        //SampleIn sin = new SampleIn(this, fileName);
        //Filter lpf = new Filter(sin, bandwidthBottom, Filter.LOW_PASS);
        //Filter hpf = new Filter(lpf, bandwidthTop, Filter.HIGH_PASS);
        AllFGTR fgtr = new AllFGTR(/*hpf*/sin, grainDuration, bandwidthTop, bandwidthBottom, grainsPerSecond);
        SampleOut sout = new SampleOut(fgtr);
    }
}
